﻿#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)

#include<stdio.h>

int main()
{


    //二分查找
    //思路：1-定义有序数组
    //      2-定义第一个下标和最后一个下标，输入需要查找的数字
    //      3-根据左右下标确定中间下标
    //      4-找到中间下标的元素与要找的元素做比较
    //       -找到了
    //       -找不到
    // (1)
    //int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//有序
    //int key;
    //printf("请输入你要找的数：");
    //scanf("%d",&key);
    //int left = 0;//左下标
    //int right = sizeof(arr) / sizeof(arr[0]) - 1;//右下标
    //while (left <= right)
    //{
    //    int mid = (left + right) / 2;
    //    if (arr[mid] == key)
    //    {
    //        printf("找到了，它的下标为：%d", mid);
    //        break;
    //    }
    //    else if (arr[mid] < key)
    //    {
    //        left = mid + 1;
    //    }
    //    else 
    //        right = mid - 1;
    //}
    //if (left > right)
    //{
    //    printf("找不到了");

    //}
    //(2)
    //int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//有序
    //int key;
    //printf("请输入你要找的数：");
    //scanf("%d", &key);
    //int left = 0;//左下标
    //int right = sizeof(arr) / sizeof(arr[0]) - 1;//右下标
    //int mid = 0;//中间元素下标
    //int flag = 0;
    //while (left <= right)
    //{
    //    mid = (left + right) / 2;
    //    if (arr[mid] > key)
    //    {
    //        right = mid - 1;
    //    }
    //    else if (arr[mid] < key)
    //    {
    //        left = mid + 1;
    //    }
    //    else
    //    {
    //        flag = 1;
    //        break;
    //    }
    //       
    //}
    //if (flag==1)
    //{
    //    printf("找到了,它的下标是%d",mid);
    //}
    //else
    //{
    //    printf("找不到了");
    //}
    //(3)
    //int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//有序
    //int key;
    //printf("请输入你要找的数：");
    //scanf("%d",&key);
    //int left = 0;//左下标
    //int right = sizeof(arr) / sizeof(arr[0]) - 1;//右下标
    //while (1)
    //{
    //    int mid = (left + right) / 2;
    //    if (left <= right)
    //    {
    //        if (arr[mid] == key)
    //        {
    //            printf("找到了，它的下标为：%d", mid);
    //            break;
    //        }
    //        else if (arr[mid] < key)
    //        {
    //            left = mid + 1;
    //        }
    //        else
    //            right = mid - 1;
    //    }
    //    else
    //    {
    //        printf("找不到了");
    //    } 
    //}


   //冒泡排序
  //  //定义数组
  //  int arr[] = { 4,1,5,6,2,10,9,12 };
  //  //确定数组中的个数
  //  int len = sizeof(arr) / sizeof(arr[0]);
  //  //确定轮数：个数-1
  //  int lun = len - 1;
  //  int i, j,temp;
  //  //轮数
  //  for (i = 0; i < lun; i++)
  //  {
  //      //每轮的次数:个数-轮数-1   len-i-1
  //      for (j = 0; j < len - i - 1; j++)
  //      {
  //          //交换
  //          if (arr[j] > arr[j + 1])
  //          {
  //              temp = arr[j];
  //              arr[j] = arr[j + 1];
  //              arr[j + 1] = temp;

  //          }
  //      }
  //  }
  ///*  for (j = 0; j < len; j++)
  //  {
  //      printf("%d ",arr[j]);
  //  }    */
  //  for (i = 0; i < len; i++)
  //  {
  //      printf("%d ", arr[i]);
  //  }
    //总结：轮数:个数-1
    //      每轮的次数：个数-轮数-1




  //使用递归求n!
//循环思路：n != 1 * 2 * 3 * 。。。。n
//递归思路：n != n * (n - 1)!
//4！ = 4 * 3！
//3！ = 3 * 2!
//2!= 2 * 1!
//1!= 1
//
//(1)递归
//int Fact(int n)
//{
//	if (n <= 0)
//	{
//		return 1;
//	}
//	else
//	{
//		return n * Fact(n - 1);
//	}
//}
//int main()
//{
//	int N;
//	printf("请输入一个数：");
//	scanf("%d",&N);
//	int res = Fact(N);
//	printf("%d!=%d",N,res);
//}
// (2)迭代
//int Fact(int n)
//{
//	int ret = 1;
//	int i;
//	for (i = 1; i <= n; i++)
//	{
//		ret *= i;
//	}
//	return ret;
//}
//int main()
//{
//	int N;
//	printf("请输入一个数：");
//	scanf("%d",&N);
//	int res = Fact(N);
//	printf("%d!=%d",N,res);
//}
// 
// 
// 
// 
// 
// 
//使用递归/迭代求斐波那契额数列数列第n项的值。  1  1  2   3  5  8  13 21
//循环思路：
//递归思路：
//int feibo(int n)
//{
//    如果 n == 1  或者 n == 2   返回 1
//
//        结果 = feibo(n - 1) + feibo(n - 2)
//}
//(1)递归
//int Fib(int N)
//{
//	if (N <= 2)
//	{
//		return 1;
//	}
//	else
//	{
//		return Fib(N - 2) + Fib(N - 1);
//	}
//}
//int main()
//{
//	int n;
//	printf("请输入一个数：");
//	scanf("%d",&n);
//	int res = Fib(n);
//	printf("斐波那契额数列数列第%d项的值:%d", n, res);
//}
//（2）迭代
//int Fib(int N)
//{
//	int a = 1;
//	int b = 1;
//	int next = 1;
//	while (N > 2)
//	{
//		next = a + b;
//		a = b;
//		b = next;
//		N--;
//	}
//	return next;
//}
//int main()
//{
//	int n;
//	printf("请输入一个数：");
//	scanf("%d",&n);
//	int res = Fib(n);
//	printf("斐波那契额数列数列第%d项的值:%d", n, res);
//}
}